📘 문제
천안 지역의 오늘 시간대별 기온을 기상청 API를 통해 수집하고, 이를 시각화하여 HTML 레포트로 구성하시오.
🛠️ 절차
- 기상청 초단기예보 API를 사용하여 천안 지역의 시간대별 기온 데이터를 수집한다.
- 수집한 데이터를 기반으로 시간대별 기온 그래프를 생성한다.
- 문제, 절차, 해답을 포함한 HTML 레포트를 작성한다.
▪ [LINK] 기상청 데이터 API, 일반 인증키(DeCoding) 다운로딩
✅ 해답
다음은 파이썬을 사용하여 기상청 API로부터 데이터를 수집하고, matplotlib를 이용하여 시간대별 기온 그래프를 생성하는 코드이다.
import requests
import json
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
# 1. 기상청 격자 좌표 및 사용자 설정
service_key = 'LYSVNDnABGDZt2945mz2PugF7jTBjzTmpAkxucNUkQy+x/USojRFJm2zo4NEVklq3CSNBDPy/ydnFIQBZz9EnA=='
nx, ny = 66, 106 # 천안의 격자 좌표
# 2. 날짜 및 시간 설정 (가용성을 위해 한 시간 이전의 시간 사용)
now = datetime.now()
base_date = now.strftime('%Y%m%d')
base_hour = (now - timedelta(hours=1)).strftime('%H') + "30"
# 3. 요청 URL 및 파라미터 설정
url = 'http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getUltraSrtFcst'
params = {
'serviceKey': service_key, # 서비스 키
'numOfRows': '1000', # 최대 데이터 수
'pageNo': '1', # 페이지 번호
'dataType': 'JSON', # 데이터 형식
'base_date': base_date, # 기준 날짜
'base_time': base_hour, # 기준 시간
'nx': nx, # X 좌표
'ny': ny # Y 좌표
}
# 4. API 요청 및 응답 상태 확인
response = requests.get(url, params=params)
print("응답 상태 코드:", response.status_code)
# 5. JSON 응답 디코딩
try:
data = response.json()
except json.JSONDecodeError:
print("⚠️ JSON 디코딩 실패")
print("응답 내용:", response.text)
exit()
# 6. 데이터 구조 접근
try:
items = data['response']['body']['items']['item']
except KeyError:
print("⚠️ 예보 데이터 접근 실패")
print("받은 JSON:", json.dumps(data, indent=2, ensure_ascii=False))
exit()
# 7. 기온(T1H) 데이터만 추출
times = []
temps = []
for item in items:
if item['category'] == 'T1H':
times.append(item['fcstTime']) # 예보 시간
temps.append(float(item['fcstValue'])) # 기온 값
# 8. 기온 데이터 유무 확인
if not temps:
print("⚠️ 기온 데이터가 존재하지 않음")
exit()
# 9. 그래프 시각화 (영문 레이블 사용)
plt.figure(figsize=(10, 5))
plt.plot(times, temps, marker='o')
plt.title('Hourly Temperature in Cheonan')
plt.xlabel('Time (HHMM)')
plt.ylabel('Temperature (°C)')
plt.grid(True)
plt.savefig('cheonan_temperature.png') # 그래프 이미지로 저장
plt.show() # 화면에 그래프 표시
plt.close()
print("✅ 그래프 저장 완료: cheonan_temperature.png")
위 코드를 실행하면 다음과 같은 시간대별 기온 그래프가 생성된다.